const Router = require("koa-router");
const router = new Router();
const KoaConfig = require("../../../koaconfig");
const {
  getAuthorInfoById,
  getAuthorArticleList,
} = require("../../db/DBApi/AuthorApi");
// getPaginatedArticles 会返回文章的详细信息，这里需要进行处理
const {
  getArticleDetail,
  addArticleViewCount,
  getPaginatedArticles,
} = require("../../db/DBApi/ArticleApi");

router.prefix(KoaConfig.path.public);

// 获取文章列表
router.get("/getArticleList", async (ctx, next) => {
  const { page, pageSize } = ctx.request.query;

  const res = await getPaginatedArticles(page, pageSize);

  console.log(res);

  // 处理评论的数量
  const sumComments = (commentList) => {
    let count = 0;
    commentList.forEach((item) => {
      count += item.replyList.length + 1;
    });

    return count;
  };

  // 将返回的数据进行处理，只返回部分信息
  const data = [];
  res.forEach((item) => {
    data.push({
      _id: item._id,
      title: item.title,
      authorNickName: item.authorNickName,
      authorEmail: item.authorEmail,
      likes: item.likes,
      views: item.views,
      summary: item.summary,
      comments: sumComments(item.commentList),
    });
  });

  // 响应数据
  ctx.status = 200;
  ctx.body = {
    code: 200,
    data: data,
  };
});

// 获取文章详细信息
router.get("/getArticleDetail", async (ctx, next) => {
  // 前端传回文章id
  const articleId = ctx.request.query.articleId;

  // 调用数据库API获取文章详细信息
  const result = await getArticleDetail(articleId);

  // console.log("article detail result: ", result);

  if (!result) {
    ctx.status = 500;
    ctx.body = {
      code: 500,
      data: "获取文章详细信息失败",
    };
    return;
  }

  // 对评论中的回复进行处理，获取作者的最新的头像
  const commentList = result.commentList;

  // 使用 Promise.all 处理所有评论的头像获取
  const updatedComments = await Promise.all(
    commentList.map(async (comment) => {
      const resComment = await getAuthorInfoById(comment.authorEmail);

      comment.authorAvatar = resComment.avatar;

      // 使用 Promise.all 处理所有回复的头像获取
      comment.replyList = await Promise.all(
        comment.replyList.map(async (reply) => {
          const resReply = await getAuthorInfoById(reply.authorEmail);

          reply.authorAvatar = resReply.avatar;

          // 返回处理后的回复
          return reply;
        })
      );
      return comment;
    })
  );

  // 更新文章的评论列表
  result.commentList = updatedComments;

  // 返回获取文章详细信息结果
  ctx.status = 200;
  ctx.body = {
    code: 200,
    data: result,
  };
});

// 增加文章浏览量，建议在文章详情页调用完之后在访问这个接口
router.get("/addArticleViewCount", async (ctx, next) => {
  // 前端传回文章id
  const articleId = ctx.request.query.articleId;

  // 调用数据库API增加文章浏览量
  const result = await addArticleViewCount(articleId);

  // 增加文章浏览量是否成功
  if (!result) {
    ctx.status = 500;
    ctx.body = {
      code: 500,
      data: "增加文章浏览量失败",
    };
    return;
  }

  // 返回增加文章浏览量结果
  ctx.status = 200;
  ctx.body = {
    code: 200,
    data: "增加文章浏览量成功",
  };
});

// 获取用户信息，主要是查看作者信息
router.get("/getAuthorInfo", async (ctx, next) => {
  // 前端传递authorId
  const authorId = ctx.request.query.authorId;
  // 根据authorId查询作者信息
  const authorInfo = await getAuthorInfoById(authorId);

  // 判断作者信息是否存在
  if (!authorInfo) {
    ctx.status = 404;
    ctx.body = {
      code: 404,
      message: "作者信息不存在",
    };
    return;
  }

  // 获取作者文章列表，这里是返回作者的文章的详情而不是文章的Id
  const articleList = await getAuthorArticleList(authorId);

  // 这里不用判断作者的文章列表是否存在
  // 因为作者有可能没有写文章

  // 成功获取作者信息，进行加工处理
  ctx.status = 200;
  ctx.body = {
    code: 200,
    data: {
      nickname: authorInfo.nickname, // 昵称
      email: authorInfo.email, // 邮箱
      avatar: authorInfo.avatar, // 头像
      description: authorInfo.description, // 简介
      create_time: authorInfo.create_time, // 创建时间
      fans: authorInfo.fans.length, // 粉丝数
      fansList: authorInfo.fans, // 粉丝列表
      followers: authorInfo.followers.length, // 关注的人数
      articleList: articleList, // 文章列表
    },
  };
});

module.exports = router;
